package main

import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

//2.1定义模型
type User struct {
	gorm.Model //ID CreateAt UpdateAt  DeletedAt
	Name       string
	Age        int64
}

func main() {
	//1.连接mysql数据库
	db, err := gorm.Open("mysql", "root:123456@(127.0.0.1)/db1?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}
	defer db.Close()

	//3.把模型与数据库中的表对应起来
	db.AutoMigrate(&User{})

	//4.1创建 插入数据
	//u := User{Name: "qimi", Age: 30}
	//db.Create(&u) //在数据库中创建了一条记录
	//
	//u1 := User{Name: "qimi12", Age: 200} //Name使用default默认值
	//db.Create(&u1)
	//
	//u2 := User{Name: "zjd", Age: 33} //Name使用default默认值
	//db.Create(&u2)

	//5.查询

	//user1:=new(User)
	//db.First(user1)

	var user User   //声明模型结构体类型变量user
	db.First(&user) //主键必须是数字类型,必须是指针内存地址
	fmt.Printf("%#v \n", user)

	var users []User
	db.Find(&users)
	fmt.Printf("%#v \n", users)

	var user2 User
	db.FirstOrInit(&user2, User{Name: "nothing"}) //若查询不到，本身数据库中不存在
	fmt.Printf("%#v \n", user2)

	var user3 User
	db.FirstOrInit(&user3, User{Name: "qimi"}) //若查询到,本身是可以查询到的
	fmt.Printf("%#v \n", user3)

	var user4 User
	//db.Attrs(User{Age: 40}).FirstOrInit(&user4, User{Name: "qimi"})
	db.Assign(User{Age: 40}).FirstOrInit(&user4, User{Name: "qimi"})
	fmt.Printf("%#v \n", user4)

}
